草庐IT

MySQL 锁定一张表

全部标签

c# - 锁定文件以进行写入/删除,同时允许任何进程读取

我正在用C#(.NET)开发应用程序,但在处理文件锁定时遇到了问题。我的主应用程序(A)需要对特定文件的读/写权限。一个单独的应用程序(B)需要对同一文件的读取权限。我需要防止用户在我的应用程序(A)运行时编辑或删除文件。应用程序(A)是长期运行的。在(A)运行时不得删除该文件,即使它没有被主动读取或写入也是如此。我完全控制了(A)和(B)的源代码,因此我可以修改其中任何一个。如何在应用程序(A)运行时阻止用户修改/删除文件,同时允许应用程序(A)读/写,应用程序(B)读? 最佳答案 使用FileShare.Read只允许从其他应用

c# - 如何在 Entity Framework 中完全锁定一行

我正在处理我们正在处理货币交易的情况。例如,我有一张用户钱包表,该行中有他们的余额。UserId;WalletId;Balance现在在我们的网站和网络服务中,每次发生特定交易时,我们需要:检查是否有足够的资金来执行该交易:从余额中扣除交易费用。在整个交易期间锁定该行/实体的正确方法是什么?根据我所读到的一些解决方案,其中EF标记一个实体,然后在将其保存回数据库时比较该标记,但是当另一个用户/程序已经编辑了该数量时它会做什么?我可以用EF实现吗?如果不是,我还有什么其他选择?调用存储过程是否允许我正确锁定该行,以便在程序A锁定该行时没有其他人可以访问SQLServer中的该行?

c# - 使用负载平衡时如何锁定对象

背景:我正在使用C#编写一个将持久操作放入队列中的函数,每个操作分为3个步骤:1.数据库操作(更新/删除/添加数据)2.使用web服务进行长时间计算3.数据库操作(保存步骤2的计算结果)对步骤1中的同一个db表,检查db表的一致性,例如步骤1中的items相同(具体例子请看下面)为了避免脏数据或损坏,我使用了一个锁对象(一个静态单例对象)来确保这3个步骤作为一个整体事务来完成。因为当多个用户在调用该函数进行操作时,他们可能会在自己操作的不同步骤修改同一个db表而没有这个锁,例如user2在他的step1中删除了itemA,而user1在检查A是否仍然存在他的第3步。(附加信息:与此同时

c# - 尝试锁定问题

我有一个问题..如果我有这样的东西可以吗:try{lock(programLock){//somestuff1}}catch(Exceptionex){//stuff2}我很好奇如果"somestuff1"导致异常,programLock是否仍然保持锁定状态? 最佳答案 不会,会释放锁,lock大致相当于这样:try{Monitor.Enter(programLock);//somestuff1}finally{Monitor.Exit(programLock);}(意思是如果抛出异常,Monitor.Exit将在您退出lock语句

c# - 线程完成时通知,不锁定调用线程

我正在开发基于NET3.5构建的遗留应用程序。这是我无法改变的约束。我需要执行第二个线程来运行长时间运行的任务而不锁定UI。当线程完成时,我需要以某种方式执行回调。现在我尝试了这个伪代码:Thread_thread=newThread(myLongRunningTask){IsBackground=True};_tread.Start();//waituntilit'sdone_thread.Join();//executefinalizer不锁定UI的第二个选项如下:Thread_thread=newThread(myLongRunningTask){IsBackground=Tru

c# - 如何通过缓存键锁定?

我正在尝试实现一个通用的线程安全缓存方法,我想知道我应该如何在其中实现锁。它应该看起来像这样://privatestaticreadonlylockObject=newObject();publicTGetCache(stringkey,FuncvalueFactory...){//trytopullfromcacheherelock(lockObject)//Idon'twanttousestaticobjectlockherebecausetheneverytimealockisperformed,allcachedobjectsinmysitehavetowait,regardi

c# - 独占锁定文件然后删除/移动它

我正在用C#实现一个类,该类应该监视一个目录,在文件被删除时处理它们,然后在处理完成后立即删除(或移动)已处理的文件。由于可以有多个线程运行此代码,第一个获取文件并独占锁定它,因此没有其他线程会读取同一个文件并且没有外部进程或用户可以以任何方式访问.我想在文件被删除/移动之前保持锁定状态,这样就不会有另一个线程/进程/用户访问它的风险。到目前为止,我尝试了2个实现选项,但没有一个能如我所愿。选项1FileStreamfs=file.Open(FileMode.Open,FileAccess.Read,FileShare.Delete);//ReadandprocessFile.Dele

c# - FileSystemWatcher 不报告锁定文件中的更改

我正在使用FileSystemWatcher监控文件夹,如下所示:watcher=newFileSystemWatcher(folder);watcher.NotifyFilter=NotifyFilters.Size;watcher.Changed+=changedCallback;当我在该文件夹中的记事本中打开一个新文件并保存它时,我会收到一条通知。如果我继续写然后保存,我会收到通知。如果我通过保存关闭文件,我会收到一条通知。正是我想要的。然而,事实证明,如果我在该文件夹中创建一个文件并将其共享模式设置为FileShare.Read,然后我写入它,那么在文件关闭之前我不会收到任何通

c# - 我应该锁定 'event' 吗?

我应该在以下情况下锁定事件吗:事件foo;线程A:将调用foo+=handler;线程B:将调用foo-=handler;我应该锁定foo吗? 最佳答案 锁定foo是个坏主意,因为值每次都会改变。您应该锁定一个不会改变的变量:privatereadonlyobjecteventLock=newobject();privateEventHandlerfooHandler;publiceventEventHandlerFoo{add{lock(eventLock){fooHandler+=value;}}remove{lock(even

c# - 如何在C#中重复一张图片

我有一张带有特定图案的图片。我如何使用GDI在另一个图像中重复它?有什么方法可以在GDI中实现吗? 最佳答案 在C#中,您可以创建一个TextureBrush,它将在您使用图像的任何地方平铺图像,然后用它填充一个区域。像这样的东西(一个充满整个图像的例子)......//Use`using`blocksforGDIobjectsyoucreate,sothey'llbereleased//quicklywhenyou'redonewiththem.using(TextureBrushbrush=newTextureBrush(you